package jmine.tec.result.api;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Marca um método para uso na infra de resultados. O retorno do método será mapeado numa instância da classe especificada.
 * 
 * @author jrenaut
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Result {

    /**
     * A classe do resultado. Deve ter o construtor default acessível.
     */
    Class<?> clazz();

    /**
     * O mapeamento entre argumentos do método e campos da classe do resultado.
     */
    ResultKey[] keys();

    /**
     * O campo da classe de resultado onde deve ser armazenado o retorno do método.
     */
    String result();

}
